package pronosticos;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import temporadas.Jornada;
import temporadas.Partido;
import temporadas.Temporada;

public class Pronostico {
	
	/*mapaGordo es un mapa donde se almacena como clave un String que representa el nombre de un equipo,
	 * y el valor asociado es una lista de objetos del tipo stdLocal, que es una clase que posee 4 atributos,
	 * 3 enteros que representan el número de "1", "x", "2" y un string que representa al equipo visitante.
	 * Todos poseen metodos observadores y modificadores*/
	
	Map<String, List<stdLocal>>mapaGordo;
		
	public Pronostico (List<Temporada> lt){
		
		Map<String,List<stdLocal>> m=new HashMap<String, List<stdLocal>>();
		
		/*Por cada temporada cogemos cogemos todas las jornadas y por cada jornada todos los partidos*/
		
		for(Temporada t:lt){
			for(Jornada j: t.getJor()){//cada temporada tiene una lista de jornadas
				for(Partido p: j.getPartidos()){//cada jornada tiene una lista de objetos partido
						//List<stdLocal> l= new ArrayList<stdLocal>();
						
						/*obtiene losdatos del partido*/
						String casa=p.geteCasa();
						String visit=p.geteVisitante();
						String result=p.getResultado();
						
						//Si el equipo local no esta en el mapa lo pongo y le añado su lista
						if(!m.containsKey(casa)){
							//System.out.println("no esta la clave");
							List<stdLocal> l= new ArrayList<stdLocal>();
							stdLocal loc=new stdLocal(visit,0,0,0);
							if(result.equals("1")){
								loc.setUno(1);
							}
							if(result.equals("X")){
								loc.setX(1);
							}
							if(result.equals("2")){
								loc.setDos(1);
							}
							
							l.add(loc);
							m.put(casa,l);
							//System.out.println(m.keySet()+" "+m.values());
							
													
						}else{
							//si el equipo esta(Key), seconsulta si el visitante ha aparecido ya(en la lista), y si
							//está actualizaremos los resultados
							boolean yaesta=false;
							//recorre la lista de valores asociados a la clave preguntando por el nombre
							for(stdLocal equipo:m.get(casa)){
								if (equipo.getEquipoVisit().equals(visit))
										yaesta=true;
								//System.out.println(equipo.getEquipoVisit()+"  "+(visit));
							}
							if(yaesta){
								int indice=0;
								for(stdLocal aux:m.get(casa)){
									if (!aux.getEquipoVisit().equals(visit))
										indice++;
									else
										break;
								}
								//int indice= m.get(casa).indexOf(visit);
								//System.out.println(indice);
								//System.out.println(m.get(casa).size());
								stdLocal loc=m.get(casa).get(indice);
								if(result.equals("1")){
									int uno=loc.getUno()+1;
									loc.setUno(uno);
								}
								if(result.equals("X")){
									int equis=loc.getX()+1;
									loc.setX(equis);
								}
								if(result.equals("2")){
									int dos=loc.getDos()+1;
									loc.setDos(dos);
								}
								yaesta=false;
								//System.out.println("he entrado");
							//en caso de que el visitante sea nuevo se añade a la lista y actualiza el map	
							}else{
								stdLocal loc=new stdLocal(visit,0,0,0);
								if(result.equals("1")){
									loc.setUno(1);
								}
								if(result.equals("X")){
									loc.setX(1);
								}
								if(result.equals("2")){
									loc.setDos(1);
								}
								
								m.get(casa).add(loc);
								
							}
													
						}
									
				}
			}
			
		}
		
		this.mapaGordo=m;
		
	}

	public Map<String, List<stdLocal>> getM() {
		return mapaGordo;
	}

	public void setM(Map<String, List<stdLocal>> m) {
		this.mapaGordo = m;
	}
	
	
	
	
}
